public class binarySearchLeftMost {
    //Leftmost
    public static int binarySearchLeftMost1(int[] a, int target) {
        //设置指针和初值
        int i = 0;
        int j = a.length - 1;
        int candidate = -1;
        //判断i和j的位置关系
        while (i <= j) {//代表范围内还有东西
            int m = (i + j) >>> 1;//int类型的除法，会自动取整，即省去小数
            if (target < a[m]) {//目标小于中间值
                j = m - 1;
            } else if (target > a[m]) {//目标大于中间值
                i = m + 1;
            } else {
                candidate = m;
                j = m - 1;
            }
        }
        return candidate;
    }

    public static int binarySearchLeftMost2(int[] a, int target) {
        //设置指针和初值
        int i = 0;
        int j = a.length - 1;
        //判断i和j的位置关系
        while (i <= j) {//代表范围内还有东西
            int m = (i + j) >>> 1;//int类型的除法，会自动取整，即省去小数
            if (target <= a[m]) {//目标小于中间值
                j = m - 1;
            } else {//目标大于或等于中间值
                i = m + 1;
            }
        }
        return i;//返回大于等于target的最左侧索引
    }
}
